﻿using Furion.DataEncryption;
using Furion.DataEncryption.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FurStudy.Core
{
    internal class DataEncryptionAndDecryption
    {
        /// <summary>
        /// 测试MD5加密，比较，大写
        /// </summary>
        public void TestMD5()
        {
            var md5Hash = MD5Encryption.Encrypt("百小僧"); // 加密
            var isEqual = MD5Encryption.Compare("百小僧", md5Hash); // 比较

            var md5CapitalizeHash = MD5Encryption.Encrypt("百小僧", true); // 输出大写MD5加密

            var s = "Furion".ToMD5Encrypt(); // 加密 - 字符串拓展方式
            var b = "Furion".ToMD5Compare(s); // 比较 - 字符串拓展方式 

            // return (md5Hash, isEqual, md5CapitalizeHash);
        }

        /// <summary>
        /// 测试DESC加解密
        /// </summary>
        public void TestDesc()
        {
            var descHash = DESCEncryption.Encrypt("百小僧", "Furion"); // 加密
            var str = DESCEncryption.Decrypt(descHash, "Furion"); // 解密

            var s = "Furion".ToDESCEncrypt("asdadasdasdasdasdasdasdsasd"); // 加密 - 字符串拓展方式
            var str2 = s.ToDESCDecrypt("asdadasdasdasdasdasdasdsasd"); // 解密 - 字符串拓展方式

            // return (descHash, str);
        }

        /// <summary>
        /// 测试AES加解密
        /// </summary>
        public void TestAES()
        {
            var key = Guid.NewGuid().ToString("N"); // 密钥，长度必须为24位或32位

            var aesHash = AESEncryption.Encrypt("百小僧", key); // 加密
            var str = AESEncryption.Decrypt(aesHash, key); // 解密

            var s = "Furion".ToAESEncrypt("asdadasdasdasdasdasdasdsasd"); // 加密 - 字符串拓展方式
            var str2 = s.ToAESDecrypt("asdadasdasdasdasdasdasdsasd"); // 解密 - 字符串拓展方式

            // return (aesHash, str2);
        }

        /// <summary>
        /// 测试JWT加解密
        /// </summary>
        public void TestJWT()
        {
            // NuGet安装扩展包：Furion.Extras.Authentication.JwtBearer
            // .net 6.0  JWTEncryption绑定插件模块暂不支持无法安装

            //var token = JWTEncryption.Encrypt(new Dictionary<string, object>()  // 加密
            //{
            //    { "UserId", user.Id },
            //    { "Account",user.Account }
            //});

            //var tokenData = JWTEncryption.ReadJwtToken("你的token");  // 解密

            //var (isValid, tokenData) = JWTEncryption.Validate("你的token"); // 验证token有效期
        }

        /// <summary>
        /// 测试RSA加密
        /// </summary>
        public void TestRSA()
        {
            var (publicKey, privateKey) = RSAEncryption.GenerateSecretKey(2048); // 生成RSA秘钥，秘钥大小必须为2048到16384，并且是8的倍数
            var basestring = RSAEncryption.Encrypt("百小僧", publicKey); // 加密
            var str = RSAEncryption.Decrypt(basestring, privateKey); // 解密

            var s = "Furion".ToRSAEncrpyt(publicKey); // 加密 - 字符串拓展方式
            var str2 = s.ToRSADecrypt(privateKey); // 解密 - 字符串拓展方式

            // return (basestring, str2);
        }
    }
}
